//package mind.comm.util;
//
//import java.awt.Graphics2D;
//import java.awt.image.BufferedImage;
//import java.io.BufferedInputStream;
//import java.io.BufferedOutputStream;
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.Iterator;
//import java.util.List;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipOutputStream;
//
//import javax.imageio.ImageIO;
//import javax.media.jai.JAI;
//import javax.media.jai.RenderedOp;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//import org.springframework.util.MultiValueMap;
//import org.springframework.web.multipart.MultipartFile;
//import org.springframework.web.multipart.MultipartHttpServletRequest;
//
//import com.sun.media.jai.codec.SeekableStream;
//import com.with.comm.exception.BizException;
//
//import egovframework.com.utl.fcc.service.EgovFileUploadUtil;
//import egovframework.com.utl.fcc.service.EgovFormBasedFileVo;
//
//public class FileUploadUtil extends EgovFileUploadUtil {
//	
//	
//	private final static String imagefile = ".jpeg;.bmp;.gif;.png;.tif;.jpg";
//	
//	
//	/**
//     * 파일을 Upload 처리한다.
//     * 
//     * @param request
//     * @param where
//     * @param maxFileSize
//     * @return
//     * @throws Exception
//     */
//    @SuppressWarnings("rawtypes")
//	public static List<EgovFormBasedFileVo>	uploadFilesMulti(HttpServletRequest request, String where, String path , long maxFileSize) throws Exception {
//	List<EgovFormBasedFileVo> list = new ArrayList<EgovFormBasedFileVo>();
//	
//	MultipartHttpServletRequest mptRequest = (MultipartHttpServletRequest)request;
//	
//	MultiValueMap<String, MultipartFile> map = mptRequest.getMultiFileMap();
//	
//	if(map != null)
//	{
//		Iterator fileIter = map.keySet().iterator();
//		while(fileIter.hasNext())
//		{
//			String key = (String)fileIter.next();
//			List<MultipartFile> fileList = map.get(key);
//			
//			for(MultipartFile mFile : fileList)
//			{
//				EgovFormBasedFileVo vo = new EgovFormBasedFileVo();
//
//			    String tmp = mFile.getOriginalFilename();
//		            
//		            if (tmp.lastIndexOf("\\") >= 0) {
//		        	tmp = tmp.substring(tmp.lastIndexOf("\\") + 1);
//		            }
//		            
//		            vo.setFileName(tmp);
//		            vo.setContentType(mFile.getContentType());
//		            vo.setServerSubPath(getSubPath(path));
//		            vo.setPhysicalName(getPhysicalFileName());
//		            vo.setSize(mFile.getSize());
//
//		            if(imagefile.indexOf(vo.getFileName().substring(vo.getFileName().lastIndexOf('.')).toLowerCase()) >=0)
//		            {
//		            	vo.setThumbnailSubPath(vo.getServerSubPath()+SEPERATOR+ResourceUtil.getThumbnailFolder());
//		            	createThumbnailImage(mFile.getInputStream(), 100, 100, where + SEPERATOR + vo.getThumbnailSubPath(), vo.getPhysicalName()+ tmp.substring(tmp.lastIndexOf(".")));
//		            }
//		            
//		            if (tmp.lastIndexOf(".") >= 0) {
//		       	 	vo.setPhysicalName(vo.getPhysicalName() + tmp.substring(tmp.lastIndexOf(".")));
//		            }
//		            
//		            if (mFile.getSize() > 0) {
//		        	saveFile(mFile.getInputStream(), new File(where + SEPERATOR + vo.getServerSubPath() + SEPERATOR + vo.getPhysicalName()));
//		        	list.add(vo); 
//		            }
//			}
//		}
//	}
//	
//	return list;
//    }
//    /**
//     * 파일을 Remove Files Uploaded 처리한다.
//     * 
//     * @param request
//     * @param where
//     * @param maxFileSize
//     * @return
//     * @throws Exception
//     */
//    public static void	removeFile(String where, String path) throws Exception {
//    		File file = new File(where + SEPERATOR + path);
//    		if(file.exists()) file.delete();
//    
//    }
//    /**
//     * 이미지에 대한 미리보기 기능을 제공한다.
//     * 
//     * mimeType의 경우는 JSP 상에서 다음과 같이 얻을 수 있다.
//     * getServletConfig().getServletContext().getMimeType(name);
//     * 
//     * @param response
//     * @param where
//     * @param serverSubPath
//     * @param physicalName
//     * @param mimeType
//     * @throws Exception
//     */
//    public static void viewFileMultiName(HttpServletResponse response, String where, String serverSubPath, String physicalName, String mimeTypeParam, String original) throws Exception {
//	String mimeType = mimeTypeParam;
//	String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName;
//	    
//	File file = new File(downFileName);
//
//	if (!file.exists()) {
//	    throw new BizException("File Does Not Exist");
//	}
//
//	if (!file.isFile()) {
//	    throw new BizException("File Does Not Exist");
//	}
//
//	byte[] b = new byte[BUFFER_SIZE];
//
//	if (mimeType == null) {
//	    mimeType = "application/octet-stream;";
//	}
//
//	response.setContentType(mimeType);
//	response.setHeader("Content-Disposition", "filename=\"" + convert(original) + "\";");
//
//	BufferedInputStream fin = null;
//	BufferedOutputStream outs = null;
//	
//	try {
//	    fin = new BufferedInputStream(new FileInputStream(file));
//	    outs = new BufferedOutputStream(response.getOutputStream());
//	    
//	    int read = 0;
//
//	    while ((read = fin.read(b)) != -1) {
//		outs.write(b, 0, read);
//	    }
//	} finally {
//	    if (outs != null) {
//		outs.close();
//	    }
//	    
//	    if (fin != null) {
//		fin.close();
//	    }
//	}
//    }
//    /**
//     * Download File Multi
//     * @param resp
//     * @param where
//     * @param serverSubPath
//     * @param listPhysicalFile
//     * @param orginalFileNames
//     * @throws Exception
//     */
//    public static void dowloadFileMulti(HttpServletResponse resp, String where, String serverSubPath, List<File> listPhysicalFile, List<String> orginalFileNames) throws Exception{
//    		//UUID uuid = UUID.randomUUID();
//		//create random UUID
//		String fileName = getTodayString().replace("-","_");
//		// set content type is zip file
//		resp.setContentType("Content-type: text/zip");
//		// set header for download
//		resp.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(),"UTF-8") + ".zip\";");
//		resp.setHeader("Content-Transfer-Encoding", "binary");
//		resp.setHeader("Pragma", "no-cache");
//		resp.setHeader("Expires", "0");
//		ByteArrayOutputStream outputBuffer  = null;
//		try {
//			// create new output buffer to compress files to zip file
//				outputBuffer = new ByteArrayOutputStream();
//			// compress to zip file
//				compressToZipFile(outputBuffer, listPhysicalFile, orginalFileNames);
//			// write zip file in stream
//			resp.getOutputStream().write(outputBuffer.toByteArray());
//			resp.getOutputStream().flush();
//		} finally{
//			if(outputBuffer != null)
//				outputBuffer.close();
//		}
//    }
//    /**
//	 * Compress files to zip file
//	 * @param out
//	 * @param files
//	 * @throws IOException
//	 */
//	private static  void compressToZipFile(final OutputStream out, List<File> files, List<String> listOriginalName)
//			throws IOException {
//		HashSet<String> fileNamesHashSet = new HashSet<String>();
//		// Create zip output stream
//		ZipOutputStream zipOutputStream = new ZipOutputStream(out);
//		/*
//		 *  This sets the compression level to STORED
//		 *  file mimetype must be uncompressed
//		 */
//		zipOutputStream.setLevel(ZipOutputStream.STORED);
//		
//		for (int i = 0; i < files.size(); i++) {
//			FileInputStream fin = new FileInputStream(files.get(i));
//			// set byte[] for one file
//			byte[] oneFileContent = new byte[(int) files.get(i).length()];
//			
//			String ext = listOriginalName.get(i).toString().substring(listOriginalName.get(i).toString().lastIndexOf(".") + 1);
//			String filename = listOriginalName.get(i).toString().substring(0, listOriginalName.get(i).toString().lastIndexOf("."));
//			String entryName = getFileNames(fileNamesHashSet, filename, "", ext, 0);
//			//add file to zip file
//			addOneFileToZipArchive(fin, zipOutputStream, entryName,
//					oneFileContent);
//		}
//		// close zip out put stream
//		zipOutputStream.close();
//	}
//
//	
//	/**
//	 * Add file to zip file
//	 * @param zipStream
//	 * @param fileName
//	 * @param content
//	 * @throws IOException
//	 */
//	private static void addOneFileToZipArchive(final FileInputStream fileInputStream, 
//			final ZipOutputStream zipStream,
//			String fileName, 
//			byte[] content) throws IOException {
//		//Create new zip entry by file name
//		ZipEntry zipEntry = new ZipEntry(fileName);
//		//put the file to zip file
//		zipStream.putNextEntry(zipEntry);
//		// write file content in zip outut stream
//		int length;
//        while((length = fileInputStream.read(content)) > 0)
//        {
//        	zipStream.write(content, 0, length);
//        }
//
//		//zipStream.write(content);
//		// close entry of zip ouput stream
//		zipStream.closeEntry();
//	}
//	
//	/**
//	 * Get File Names & rename file if exist
//	 * @param hashSet
//	 * @param name
//	 * @param changedName
//	 * @param extension
//	 * @param count
//	 * @return
//	 */
//	private  static String getFileNames(HashSet<String> hashSet, String name, String changedName, String extension, int count){
//		String fileNames = ((changedName.trim().length()> 0) ? changedName  : name);
//		int fileCount = count;
//		String rtFileName = ((changedName.trim().length()> 0) ? changedName  : name) + "." + extension;
//		// check if name is exited
//		if(!hashSet.add(fileNames + "." + extension)){
//			// add number
//			fileCount++;
//			// format string "filename(num)"
//			fileNames = String.format("%s(%d)",  name, fileCount);
//			// call back
//			rtFileName = getFileNames(hashSet, name, fileNames, extension, fileCount);
//		}
//		// return final file name
//		return rtFileName;
//	}
//	/**
//	 * Get file exist
//	 * @param where
//	 * @param path
//	 * @return
//	 * @throws Exception
//	 */
//	public static File getFile(String where, String path) throws Exception {
//		File file = new File(where + SEPERATOR + path);
//		if(file.exists()){
//			return file;
//		}else{ 
//			return null;
//		}
//	}
//	/**
//	 * Get file path
//	 * @param where
//	 * @param path
//	 * @return
//	 * @throws Exception
//	 */
//	public static String getFilePath(String where, String path) throws Exception {
//		String dest = where + SEPERATOR + path;
//		File file = new File(dest);
//		if(file.exists()){
//			return dest;
//		}else{ 
//			return null;
//		}
//	}
//	/**
//	 * 
//	 * @param path
//	 * @return
//	 */
//    public static String getSubPath(String path)
//    {
//    	if(path == null)
//    	{
//    		return getTodayString();
//    	}
//    	else
//    	{
//    		return path;
//    	}
//    }
//    
//    public static void createThumbnailImage(InputStream imageInputStream,int width,int height,String subfolder,String filename) throws IOException{
//		File save = new File(subfolder + File.separator + filename); // 썸네일 이미지 파일
//		
//		// 디렉토리 생성
//		if (! save.getParentFile().exists()) {
//			save.getParentFile().mkdirs();
//		}
//		
//		SeekableStream seekableImageStream = SeekableStream.wrapInputStream(imageInputStream, true);
//		RenderedOp rOp = JAI.create("stream",seekableImageStream); //원본이미지파일로 객체생성
//		BufferedImage im = rOp.getAsBufferedImage(); // 버퍼드이미지 객체를 얻어옴
//
//		// 메모리에 이미지 공간을 생성
//		BufferedImage thumb = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//		Graphics2D g2 = thumb.createGraphics(); // 버퍼드이미지객체로 부터 그래픽2D객체를 얻어옴
//		g2.drawImage(im,0,0,width,height,null); // 메모리의 이미지 공간에 원본 이미지를 지정한크기로 그린다.
//		
//		ImageIO.write(thumb,"jpg",save); // 그린 이미지를 파일로 저장한다
//    }
//    
//}
